

import matplotlib.pyplot as plt
import numpy as np

def visualize_two_images(fe1_pred_dep, original_depth_map):
    # 假设 fe1_pred_dep 和 original_depth_map 都是形状为 (B, C, H, W) 的张量
    # 移除批次维度（假设 B=1）
    print(f"可视化的数据形状fe1_pred_dep{fe1_pred_dep.shape},original_depth_map{original_depth_map.shape}")
    depth_image = fe1_pred_dep.squeeze(0)
    original_depth = original_depth_map.squeeze(0)
    """
    是的，depth_image.dim() 和 len(depth_image.shape) 在大多数情况下是等价的，它们都用来获取张量的维度数量（即张量的阶数）。
    """
    if depth_image.dim() == 3:  # 多通道特征图
        # print(f"多通道{depth_image.dim()}")
        # 选择一个通道进行可视化（例如第 0 个通道）
        depth_image = depth_image[0, :, :].detach().cpu().numpy()
    elif depth_image.dim() == 2:  # 单通道深度图
        print(f"单通道{depth_image.dim()}")
        depth_image = depth_image.detach().cpu().numpy()
    else:
        print("不支持的图像维度")
        return
    
    if original_depth.dim() == 3:  # 多通道特征图
        # print(f"多通道{original_depth.dim()}")
        # 选择一个通道进行可视化（例如第 0 个通道）
        original_depth = original_depth[0, :, :].detach().cpu().numpy()
    elif original_depth.dim() == 2:  # 单通道深度图
        print(f"单通道{original_depth.dim()}")
        original_depth = original_depth.detach().cpu().numpy()
    else:
        print("不支持的图像维度")
        return

    # 创建两个子图
    fig, axes = plt.subplots(1, 2, figsize=(12, 6))
    # 显示第一个图像
    axes[0].imshow(depth_image, cmap='Spectral')
    axes[0].set_title("Predicted Depth Map")
    axes[0].axis('off')
    fig.colorbar(plt.cm.ScalarMappable(cmap='Spectral'), ax=axes[0])
    # 显示第二个图像
    axes[1].imshow(original_depth, cmap='magma')
    axes[1].set_title("Original Depth Map")
    axes[1].axis('off')
    fig.colorbar(plt.cm.ScalarMappable(cmap='magma'), ax=axes[1])
    plt.tight_layout()
    plt.show()

def visualize_two_numpy(fe1_pred_dep, original_depth_map):
    # 假设 fe1_pred_dep 和 original_depth_map 都是形状为 (B, C, H, W) 的张量
    # print(f"可视化的数据形状fe1_pred_dep{fe1_pred_dep.shape},original_depth_map{original_depth_map.shape}")
    # depth_image = fe1_pred_dep.squeeze(0)  ## 移除批次维度（假设 B=1）
    depth_image = fe1_pred_dep
    # original_depth = original_depth_map.squeeze(0)
    original_depth = original_depth_map
    print(type(fe1_pred_dep))  # 输出: <class 'numpy.ndarray'>   <class 'torch.Tensor'>      # 检查类型
    # print(type(original_depth_map))  # 输出: <class 'torch.Tensor'>
    """
    是的，depth_image.dim() 和 len(depth_image.shape) 在大多数情况下是等价的，它们都用来获取张量的维度数量（即张量的阶数）。
    """
    # if depth_image.dim() == 3:  # 多通道特征图
    #     # print(f"多通道{depth_image.dim()}")
    #     # 选择一个通道进行可视化（例如第 0 个通道）
    #     depth_image = depth_image[0, :, :].detach().cpu().numpy()
    # elif depth_image.dim() == 2:  # 单通道深度图
    #     print(f"单通道{depth_image.dim()}")
    #     depth_image = depth_image.detach().cpu().numpy()
    # else:
    #     print("不支持的图像维度")
    #     return
    
    # if original_depth.dim() == 3:  # 多通道特征图
    #     # print(f"多通道{original_depth.dim()}")
    #     # 选择一个通道进行可视化（例如第 0 个通道）
    #     original_depth = original_depth[0, :, :].detach().cpu().numpy()
    # elif original_depth.dim() == 2:  # 单通道深度图
    #     print(f"单通道{original_depth.dim()}")
    #     original_depth = original_depth.detach().cpu().numpy()
    # else:
    #     print("不支持的图像维度")
    #     return

    # 创建两个子图，增加 figsize 和 dpi
    fig, axes = plt.subplots(1, 2, figsize=(24, 12), dpi=300)
    # 显示第一个图像
    depth_image = np.transpose(depth_image, (1, 2, 0))
    axes[0].imshow(depth_image, cmap='Spectral')

    axes[0].set_title("Predicted Depth Map")
    axes[0].axis('off')
    fig.colorbar(plt.cm.ScalarMappable(cmap='Spectral'), ax=axes[0])

    # # 显示第二个图像
    original_depth = np.transpose(original_depth, (1, 2, 0))
    axes[1].imshow(original_depth, cmap='magma')
    axes[1].set_title("Original Depth Map")
    axes[1].axis('off')
    fig.colorbar(plt.cm.ScalarMappable(cmap='magma'), ax=axes[1])
    plt.tight_layout()
    plt.show()










# 显示四维的numpy【图片

        # print(img_colored_np.shape)
        # visualize_two_numpy(img_colored_np,img_colored_np)
        img_colored_np1 = np.squeeze(img_colored_np, axis=0)  # 移除第一个维度，形状变为 (3, 352, 1216)   
        img_colored_np2 = np.transpose(img_colored_np1, (1, 2, 0))  # 转置为 (352, 1216, 3)
        # 确保数据类型为 uint8（如果需要）
        img_colored_np2 = (img_colored_np2 * 255).astype(np.uint8)
        plt.imshow(img_colored_np2)
        plt.axis('off')  # 不显示坐标轴
        plt.show()    
    



    img_colored_np1 = np.squeeze(normalized_value.squeeze(), axis=0)  # 移除第一个维度，形状变为 (3, 352, 1216)   
    print(f"imag1np.shape")
    # img_colored_np2 = np.transpose(img_colored_np1, (1, 2, 0))  # 转置为 (352, 1216, 3)
    # 确保数据类型为 uint8（如果需要）
    img_colored_np2 = (img_colored_np1 * 255).astype(np.uint8)
    plt.imshow(img_colored_np2)
    plt.axis('off')  # 不显示坐标轴
    plt.show()  


    def visualize_two_images(fe1_pred_dep, original_depth_map):
    # 假设 fe1_pred_dep 和 original_depth_map 都是形状为 (B, C, H, W) 的张量
    # 移除批次维度（假设 B=1）
    print(f"可视化的数据形状fe1_pred_dep{fe1_pred_dep.shape},original_depth_map{original_depth_map.shape}")
    # depth_image = fe1_pred_dep.squeeze(0)
    depth_image = fe1_pred_dep
    # original_depth = original_depth_map.squeeze(0)
    original_depth = original_depth_map
    # 检查类型
    print(type(fe1_pred_dep))  # 输出: <class 'numpy.ndarray'>
    # print(type(original_depth_map))  # 输出: <class 'torch.Tensor'>
    """
    是的，depth_image.dim() 和 len(depth_image.shape) 在大多数情况下是等价的，它们都用来获取张量的维度数量（即张量的阶数）。
    """

    # 创建两个子图
    fig, axes = plt.subplots(1, 2, figsize=(12, 6))
    # 显示第一个图像
    axes[0].imshow((depth_image *255).astype(np.uint8), cmap='Spectral')
    axes[0].set_title("Predicted Depth Map")
    axes[0].axis('off')
    fig.colorbar(plt.cm.ScalarMappable(cmap='Spectral'), ax=axes[0])
    # # 显示第二个图像
    # axes[1].imshow(original_depth, cmap='magma')
    # axes[1].set_title("Original Depth Map")
    # axes[1].axis('off')
    # fig.colorbar(plt.cm.ScalarMappable(cmap='magma'), ax=axes[1])
    plt.tight_layout()
    plt.show()



    img_colored_np1 = np.squeeze(normalized_value.squeeze(), axis=0)  # 移除第一个维度，形状变为 (3, 352, 1216)   
    # print(f"imag1np.shape{}")
    img_colored_np2 = np.transpose(img_colored_np1, (1, 2, 0))  # 转置为 (352, 1216, 3)
    确保数据类型为 uint8（如果需要）
    print(f"数值类型: fe1_pred_dep: {normalized_value.dtype}, original_depth_map: {normalized_value.dtype}")
    img_colored_np2 = (normalized_value * 255).astype(np.uint8)
    plt.imshow(img_colored_np2)
    plt.axis('off')  # 不显示坐标轴
    plt.show()  